package com.jf.cloud.service.sysmanager.remote;

import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.jf.cloud.service.sysmanager.dao.ISysMenuService;
import com.jf.cloud.service.sysmanager.entity.SysMenu;
import com.jf.cloud.service.sysmanager.entity.SysStaff;
import com.jf.cloud.service.sysmanager.support.web.BaseController;

import net.sf.json.JSONArray;

/**
 * 菜单管理相关
 * 
 * @author 卫江波
 * @2017年7月6日下午3:49:35
 */
@Controller
@RequestMapping("/menu")
public class MenuController extends BaseController {
	static Logger log = LoggerFactory.getLogger(MenuController.class);
	
	/**
	 * 菜单 服务
	 */
	@Resource
	private ISysMenuService menuService;

	/**
	 * 菜单列表
	 * 
	 * @author 朱建文 创建时间：2017年12月5日 下午7:58:39
	 */
	@RequestMapping("/list")
	public String list(HttpServletRequest request, HttpServletResponse response) {
		Integer flag = this.getIntValue(request, "flag");
		if (Integer.valueOf(1).equals(flag)) {
			request.setAttribute("msg", "添加成功");
		}
		List<Map<String, Object>> menus = menuService.getMenuListByTree();
		request.setAttribute("menus", JSONArray.fromObject(menus).toString());
		return "jsp/system/menu_list";
	}

	/**
	 * 根据Id查询菜单详情
	 * 
	 * @author 朱建文 创建时间：2017年12月5日 下午7:58:58
	 */
	@RequestMapping("/info")
	public String info(HttpServletRequest request, HttpServletResponse response) {
		Long id = getLongValue(request, "id");
		SysMenu sysMenu = menuService.findByPK(id);
		request.setAttribute("menuInfo", sysMenu);
		
		//查询父节点集合开始  fbc
		try {
			request.setAttribute("parentNodes", menuService.getSelectListBy1Level());
		} catch (Exception e) {
			log.error("查询父节点集合出错了" , e);
			request.setAttribute("msg", "查询父节点集合出错了");
		}
		//结束
		return "jsp/system/menu_info";
	}
	
	/**
	 * 查询某一菜单下的子菜单或子按钮(页面加载表格数据)
	 * 
	 * @author 朱建文 创建时间：2017年12月5日 下午7:59:10
	 */
	@RequestMapping("/menuList.json")
	@ResponseBody
	public List<SysMenu> getButtonList(HttpServletRequest request, HttpServletResponse response){
		//查询按钮或菜单
		Long rowId = getLongValue(request, "rowId");
		if (rowId == null || rowId.intValue() == 0) {
			return null;
		}
		List<SysMenu> buttonList = null;
		try {
			buttonList = menuService.getBelongList(rowId);
		} catch (Exception e) {
			log.error("查询该菜单下的子菜单(子按钮)出错了" , e);
			request.setAttribute("msg", "查询该菜单下的子菜单(子按钮)出错了");
		}
		return buttonList;
	}
	
	/**
	 * 修改菜单
	 * 
	 * @author 朱建文 创建时间：2017年12月6日 下午2:59:41
	 */
	@RequestMapping("/update.do")
	public String update(HttpServletRequest request, HttpServletResponse response, SysMenu sysMenu){
		SysStaff currUser = getLoginUser(request);
		if (sysMenu != null && sysMenu.getRowId() != null) {
			try {
				menuService.updateSysmenu(sysMenu, currUser);
				request.setAttribute("msg", "菜单修改成功");
			} catch (Exception e) {
				log.error("修改菜单出错了" , e);
				request.setAttribute("msg", "修改菜单出错了");
			}
		}
		return list(request, response);
	}
	
	/**
	 * 获取添加按钮页面
	 * 
	 * @author 朱建文 创建时间：2017年12月6日 下午3:00:07
	 */
	@RequestMapping("/addButtonShow")
	public String addButtonShow(HttpServletRequest request, HttpServletResponse response){
		Long rowId = getLongValue(request, "rowId");
		if (rowId == null || rowId.intValue() == 0) {
			return null;
		}
		try {
			request.setAttribute("menuInfo", menuService.findSysmenu(rowId));
		} catch (Exception e) {
			log.error("到添加按钮页面出错了" , e);
			request.setAttribute("msg", "到添加按钮页面出错了");
		}
		request.setAttribute("addType", "0"); 
		return "jsp/system/menu_add";
	}
	
	/**
	 * 获取添加菜单页面
	 * 
	 * @author 朱建文 创建时间：2017年12月6日 下午3:00:22
	 */
	@RequestMapping("/addMenuShow")
	public String addMenuShow(HttpServletRequest request, HttpServletResponse response){
		try {
			request.setAttribute("parentNodes", menuService.getSelectListBy1Level());
		} catch (Exception e) {
			log.error("到添加菜单页面出错了" , e);
			request.setAttribute("msg", "到添加菜单页面出错了");
		}
		request.setAttribute("addType", "1");
		return "jsp/system/menu_add";
	}
	
	/**
	 * 添加菜单
	 * 
	 * @author 朱建文 创建时间：2017年12月6日 下午3:00:33
	 */
	@RequestMapping("/add.do")
	public String add(HttpServletRequest request, HttpServletResponse response, SysMenu sysMenu){
		int addType = getIntValue(request, "addType");
		if (isReCommit(request)) {
			return "redirect:/menu/list?flag=1";
		}
		SysStaff currUser = getLoginUser(request);
//		sysMenu.setMenuCode(DateUtil.getCurrentDateTime(DateUtil.YYYYMMDD_HHMMSS));
		if (currUser.getRowId() == 1 && currUser.getStaffType().equals("1")) {
			if (addType == 1) {//添加的是菜单
				if (Integer.valueOf(2).equals(sysMenu.getMenuFlag())) {//添加的是二级菜单
					if (sysMenu.getParentId() == null || sysMenu.getParentId().intValue() == 0 ) {
						//没有父节点id
						request.setAttribute("msg", "请选择父节点");
						return list(request, response);
					}
					if (StringUtils.isBlank(sysMenu.getUrl())) {
						request.setAttribute("msg","请输入链接路径");
						return list(request, response);
					}
				} else {
					sysMenu.setParentId(0L);
					sysMenu.setUrl("NULL");
				}
				if (StringUtils.isBlank(sysMenu.getMenuName())) {
					request.setAttribute("msg", "请输入菜单名称");
					return list(request, response);
				}
				if (sysMenu.getOrderNum() == null || sysMenu.getOrderNum().intValue() == 0 ) {
					request.setAttribute("msg", "请输入排序编号");
					return list(request, response);
				}
				Boolean bool;
				try {
					bool = menuService.saveSysmenu(sysMenu, currUser);
				} catch (Exception e) {
					log.error("添加菜单出错了" , e);
					request.setAttribute("msg", "添加菜单出错了");//添加失败
					return list(request, response);
				}
				if (bool) {
					request.setAttribute("msg", "添加成功");//添加成功
				}
				
			} else {//添加的是按钮
				if (sysMenu.getParentId() == null || sysMenu.getParentId().intValue() == 0 ) {
					//没有父节点id
					request.setAttribute("msg", "请选择父节点");
					return list(request, response);
				}
				if (StringUtils.isBlank(sysMenu.getMenuName())) {
					request.setAttribute("msg", "请输入菜单名称");
					return list(request, response);
				}
				if (sysMenu.getOrderNum() == null || sysMenu.getOrderNum().intValue() == 0 ) {
					request.setAttribute("msg", "请输入正确的排序编号");
					return list(request, response);
				}
				Boolean bool;
				try {
					bool = menuService.saveSysmenu(sysMenu, currUser);
				} catch (Exception e) {
					log.error("按钮添加出错了" , e);
					request.setAttribute("msg", "按钮添加出错了");//添加失败
					return list(request, response);
				}
				if (bool) {
					request.setAttribute("msg", "添加成功");//添加成功
				}
			}
		} else {
			request.setAttribute("msg", "添加失败，权限不够呦");//添加失败
			return list(request, response);
		}
		return list(request, response);
	}
	/**
	 * 删除菜单
	 * 
	 * @author 朱建文 创建时间：2017年12月6日 下午3:01:16
	 */
	@ResponseBody
	@RequestMapping("/deleteSysmenu")
	public int deleteSysmenu(HttpServletRequest request, Long rowId) {
		SysStaff currUser = getLoginUser(request);
		if (currUser != null && rowId != null && rowId > 0) {
			try {
				List<SysMenu> belongListSysmenu = menuService.getBelongList(rowId);
				if (belongListSysmenu != null && belongListSysmenu.size() > 0) {
					//该菜单下还有子菜单(子按钮)未删除
					return 2;
				}
				if (menuService.deleteSysmenu(rowId, currUser)) {
					return 1;
				}
			} catch (Exception e) {
				log.error("删除菜单出错了", e); 
				request.setAttribute("msg", "删除菜单出错了 ");
			}	
		}
		return 3;
	}
}
